Return to start page
Core/General/Struct Hash Table.j
1 library AStructCoreGeneralHashTable requires optional ALibraryCoreDebugMisc
2
3 /// Provides access to a single hashtable instance.
4 /// @author Tamino Dauth
5 struct AHashTable
6 //static members
7 private static AHashTable m_global
8 //members
9 private hashtable m_hashTable
10
11 //! runtextmacro optional A_STRUCT_DEBUG("\"AHashTable\"")
12
13 //! textmacro AHashTableOperationMacro takes TYPE, TYPENAME, METHODTYPENAME
14 public method set$TYPENAME$ takes string key, string label, $TYPE$ value returns nothing
15 call Save$METHODTYPENAME$(this.m_hashTable, StringHash(key), StringHash(label), value)
16 endmethod
17
18 public method $TYPE$ takes string key, string label returns $TYPE$
19 return Load$METHODTYPENAME$(this.m_hashTable, StringHash(key), StringHash(label))
20 endmethod
21
22 public method has$TYPENAME$ takes string key, string label returns boolean
23 return HaveSaved$TYPENAME$(this.m_hashTable, StringHash(key), StringHash(label))
24 endmethod
25
26 public method remove$TYPENAME$ takes string key, string label returns nothing
27 call RemoveSaved$TYPENAME$(this.m_hashTable, StringHash(key), StringHash(label))
28 endmethod
29
30 public method setHandle$TYPENAME$ takes handle usedHandle, string label, $TYPE$ value returns nothing
31 call Save$METHODTYPENAME$(this.m_hashTable, GetHandleId(usedHandle), StringHash(label), value)
32 endmethod
33
34 public method handle$TYPENAME$ takes handle usedHandle, string label returns $TYPE$
35 return Load$METHODTYPENAME$(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
36 endmethod
37
38 public method hasHandle$TYPENAME$ takes handle usedHandle, string label returns boolean
39 return HaveSaved$TYPENAME$(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
40 endmethod
41
42 public method removeHandle$TYPENAME$ takes handle usedHandle, string label returns nothing
43 call RemoveSaved$TYPENAME$(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
44 endmethod
45 //! endtextmacro
46
47 //! runtextmacro AHashTableOperationMacro("integer", "Integer", "Integer")
48 //! runtextmacro AHashTableOperationMacro("boolean", "Boolean", "Boolean")
49 //! runtextmacro AHashTableOperationMacro("real", "Real", "Real")
50 //! runtextmacro AHashTableOperationMacro("string", "String", "Str")
51
52 //! textmacro AHashTableHandleOperationMacro takes TYPE, TYPENAME, METHODTYPENAME
53 public method set$TYPENAME$ takes string key, string label, $TYPE$ value returns nothing
54 call Save$TYPENAME$Handle(this.m_hashTable, StringHash(key), StringHash(label), value)
55 endmethod
56
57 public method $METHODTYPENAME$ takes string key, string label returns $TYPE$
58 return Load$TYPENAME$Handle(this.m_hashTable, StringHash(key), StringHash(label))
59 endmethod
60
61 public method has$TYPENAME$ takes string key, string label returns boolean
62 return HaveSavedHandle(this.m_hashTable, StringHash(key), StringHash(label))
63 endmethod
64
65 public method remove$TYPENAME$ takes string key, string label returns nothing
66 call RemoveSavedHandle(this.m_hashTable, StringHash(key), StringHash(label))
67 endmethod
68
69 public method setHandle$TYPENAME$ takes handle usedHandle, string label, $TYPE$ value returns nothing
70 call Save$TYPENAME$Handle(this.m_hashTable, GetHandleId(usedHandle), StringHash(label), value)
71 endmethod
72
73 public method handle$TYPENAME$ takes handle usedHandle, string label returns $TYPE$
74 return Load$TYPENAME$Handle(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
75 endmethod
76
77 public method hasHandle$TYPENAME$ takes handle usedHandle, string label returns boolean
78 return HaveSavedHandle(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
79 endmethod
80
81 public method removeHandle$TYPENAME$ takes handle usedHandle, string label returns nothing
82 call RemoveSavedHandle(this.m_hashTable, GetHandleId(usedHandle), StringHash(label))
83 endmethod
84 //! endtextmacro
85
86 //! runtextmacro AHashTableHandleOperationMacro("player", "Player", "player")
87 //! runtextmacro AHashTableHandleOperationMacro("widget", "Widget", "widget")
88 //! runtextmacro AHashTableHandleOperationMacro("destructable", "Destructable", "destructable")
89 //! runtextmacro AHashTableHandleOperationMacro("item", "Item", "item")
90 //! runtextmacro AHashTableHandleOperationMacro("unit", "Unit", "unit")
91 //! runtextmacro AHashTableHandleOperationMacro("ability", "Ability", "ability")
92 //! runtextmacro AHashTableHandleOperationMacro("timer", "Timer", "timer")
93 //! runtextmacro AHashTableHandleOperationMacro("trigger", "Trigger", "trigger")
94 //! runtextmacro AHashTableHandleOperationMacro("triggercondition", "TriggerCondition", "triggerCondition")
95 //! runtextmacro AHashTableHandleOperationMacro("triggeraction", "TriggerAction", "triggerAction")
96 //! runtextmacro AHashTableHandleOperationMacro("event", "TriggerEvent", "triggerEvent")
97 //! runtextmacro AHashTableHandleOperationMacro("force", "Force", "force")
98 //! runtextmacro AHashTableHandleOperationMacro("group", "Group", "group")
99 //! runtextmacro AHashTableHandleOperationMacro("location", "Location", "location")
100 //! runtextmacro AHashTableHandleOperationMacro("rect", "Rect", "rect")
101 //! runtextmacro AHashTableHandleOperationMacro("boolexpr", "BooleanExpr", "boolexpr")
102 //! runtextmacro AHashTableHandleOperationMacro("sound", "Sound", "sound")
103 //! runtextmacro AHashTableHandleOperationMacro("effect", "Effect", "effect")
104 //! runtextmacro AHashTableHandleOperationMacro("unitpool", "UnitPool", "unitPool")
105 //! runtextmacro AHashTableHandleOperationMacro("itempool", "ItemPool", "itemPool")
106 //! runtextmacro AHashTableHandleOperationMacro("quest", "Quest", "quest")
107 //! runtextmacro AHashTableHandleOperationMacro("questitem", "QuestItem", "questitem")
108 //! runtextmacro AHashTableHandleOperationMacro("defeatcondition", "DefeatCondition", "defeatCondition")
109 //! runtextmacro AHashTableHandleOperationMacro("timerdialog", "TimerDialog", "timerDialog")
110 //! runtextmacro AHashTableHandleOperationMacro("leaderboard", "Leaderboard", "leaderboard")
111 //! runtextmacro AHashTableHandleOperationMacro("multiboard", "Multiboard", "multiboard")
112 //! runtextmacro AHashTableHandleOperationMacro("multiboarditem", "MultiboardItem", "multiboardItem")
113 //! runtextmacro AHashTableHandleOperationMacro("trackable", "Trackable", "trackable")
114 //! runtextmacro AHashTableHandleOperationMacro("dialog", "Dialog", "dialog")
115 //! runtextmacro AHashTableHandleOperationMacro("button", "Button", "button")
116 //! runtextmacro AHashTableHandleOperationMacro("texttag", "TextTag", "textTag")
117 //! runtextmacro AHashTableHandleOperationMacro("lightning", "Lightning", "lightning")
118 //! runtextmacro AHashTableHandleOperationMacro("image", "Image", "image")
119 //! runtextmacro AHashTableHandleOperationMacro("ubersplat", "Ubersplat", "ubersplat")
120 //! runtextmacro AHashTableHandleOperationMacro("region", "Region", "region")
121 //! runtextmacro AHashTableHandleOperationMacro("fogstate", "FogState", "fogState")
122 //! runtextmacro AHashTableHandleOperationMacro("fogmodifier", "FogModifier", "fogModifier")
123 ///! runtextmacro AHashTableHandleOperationMacro("agent", "Agent", "agent") /// @todo Missing native
124 //! runtextmacro AHashTableHandleOperationMacro("hashtable", "Hashtable", "hashtable")
125
126 /// Flushes all data of the hashtable.
127 public method flush takes nothing returns nothing
128 call FlushParentHashtable(this.m_hashTable)
129 endmethod
130
131 /// Flushes all data of a hashtable key.
132 public method flushKey takes string key returns nothing
133 call FlushChildHashtable(this.m_hashTable, StringHash(key))
134 endmethod
135
136 public method flushHandle takes handle usedHandle returns nothing
137 call FlushChildHashtable(this.m_hashTable, GetHandleId(usedHandle))
138 endmethod
139
140 //! textmacro AHashTableDestructionMacro takes TYPE, TYPENAME, DESTRUCTIONNAME
141 public method destroy$TYPENAME$ takes $TYPE$ $TYPENAME$ returns nothing
142 call this.flushHandle($TYPENAME$)
143 call $DESTRUCTIONNAME$$TYPENAME$($TYPENAME$)
144 endmethod
145 //! endtextmacro
146
147 //! runtextmacro AHashTableDestructionMacro("trigger", "Trigger", "Destroy")
148 //! runtextmacro AHashTableDestructionMacro("timer", "Timer", "Destroy")
149 //! runtextmacro AHashTableDestructionMacro("unit", "Unit", "Remove")
150 //! runtextmacro AHashTableDestructionMacro("item", "Item", "Remove")
151 //! runtextmacro AHashTableDestructionMacro("destructable", "Destructable", "Remove")
152
153 public static method create takes nothing returns thistype
154 local thistype this = thistype.allocate()
155 //members
156 set this.m_hashTable = InitHashtable()
157
158 return this
159 endmethod
160
161 public method onDestroy takes nothing returns nothing
162 //members
163 call FlushParentHashtable(this.m_hashTable)
164 set this.m_hashTable = null
165 endmethod
166
167 private static method onInit takes nothing returns nothing
168 //static members
169 set AHashTable.m_global = 0
170 endmethod
171
172 /**
173 * Global hash table is used by Advanced Script Library itself.
174 */
175 public static method global takes nothing returns thistype
176 if (thistype.m_global == 0) then
177 set thistype.m_global = thistype.create()
178 endif
179 return thistype.m_global
180 endmethod
181 endstruct
182
183 endlibrary